package com.escom.healthlc.controller;

import com.escom.healthlc.business.RegistrarBusiness;
import com.escom.healthlc.entidad.MedicoVO;
import com.escom.healthlc.entidad.PersonaVO;
import com.escom.healthlc.entidad.UsuarioVO;
import com.escom.healthlc.utils.Constantes;
import com.escom.healthlc.ws.MailService;
import java.net.UnknownHostException;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.mail.MailSendException;

@ManagedBean(name = "RegistrarController")
@ViewScoped
public class RegistrarController {

    private static final Logger logger = LoggerFactory.getLogger(RegistrarController.class);

    @ManagedProperty("#{RegistrarBusiness}")
    private RegistrarBusiness registrarBusiness;

    @ManagedProperty("#{MailService}")
    private MailService mailService;

    private MedicoVO medicoCreate;
    private boolean validarUsuario;

    public RegistrarController() {

    }

    @PostConstruct
    public void initRegistrarController() {
        executeLimpiarObejects(null);
    }

    public void executeRegistrarUsuario(ActionEvent acEvt) {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        FacesMessage facesMessage;
        registrarBusiness.registrarMedico(medicoCreate);
        int estado = registrarBusiness.getEstado();
        String messageEstado = registrarBusiness.getMessageEstado();
        switch (estado) {
            case Constantes.SIN_ERROR:
                try {
                    mailService.sendMail("from@no-spam.com",
                            medicoCreate.getEmail(),
                            "Bienvenido al sistema HealthLC",
                            "Su registro se a relizado con exito \n\n");
                } catch (UnknownHostException | MailSendException e) {
                    
                }
                facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, Constantes.MESSAGE_TITLE, "Su registro se a realizado con exito");
                facesContext.addMessage(null, facesMessage);
                break;
            case Constantes.ERROR_NEGOCIO:
                facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, Constantes.MESSAGE_TITLE, "Erro al registrar, por favor intentelo de nuevo");
                facesContext.addMessage(null, facesMessage);
                break;
        }
        executeLimpiarObejects(acEvt);
    }

    public void executeValidarUsuario() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        FacesMessage facesMessage;
        validarUsuario = registrarBusiness.validarUsuario(medicoCreate);
        if (validarUsuario) {
            UsuarioVO usuario = medicoCreate.getUsuario();
            usuario.setNick("");
        }
    }

    public void executeLimpiarObejects(ActionEvent acEvt) {
        medicoCreate = new MedicoVO();
        UsuarioVO usuarioVO = new UsuarioVO();
        medicoCreate.setUsuario(usuarioVO);
        validarUsuario = false;
    }

    public void setRegistrarBusiness(RegistrarBusiness registrarBusiness) {
        this.registrarBusiness = registrarBusiness;
    }

    public void setMailService(MailService mailService) {
        this.mailService = mailService;
    }

    public MedicoVO getMedicoCreate() {
        return medicoCreate;
    }

    public void setMedicoCreate(MedicoVO medicoCreate) {
        this.medicoCreate = medicoCreate;
    }

    public boolean isValidarUsuario() {
        return validarUsuario;
    }

    public void setValidarUsuario(boolean validarUsuario) {
        this.validarUsuario = validarUsuario;
    }

}
